package com.example.d6_homework.homework04;

import java.lang.reflect.Field;


public class Test {
    public static void main(String[] args) {
        // 创建ExampleClass实例
        ExampleClass example = new ExampleClass();
        // 设置propertyName属性的值
        example.setPropertyName("John Doe");
        // 创建Test实例
        Test test = new Test();

        // 通过反射获取example对象的propertyName属性值
        Object value = test.getProperty(example, "propertyName");
        // 打印属性值
        System.out.println(value);
    }

    /**
     * 通过反射获取对象指定属性的值
     *
     * @param obj          要获取属性值的对象
     * @param propertyName 属性名
     * @return 属性值,如果发生异常则返回null
     */
    public Object getProperty(Object obj, String propertyName) {
        try {
            // 获取对象的类
            Class c = obj.getClass();
            // 根据属性名获取属性对象
            Field field = c.getDeclaredField(propertyName);
            // 设置属性可访问,即使它是私有的
            field.setAccessible(true);
            // 返回属性值
            return field.get(obj);
        } catch (Exception e) {
            // 打印异常信息
            e.printStackTrace();
            // 如果发生异常,返回null
            return null;
        }
    }
}
